# 常用的迭代器操作函数
lst=[54,56,77,4,567,34]

# (1) 排序操作
asc_lst=sorted(lst) # 升序
desc_lst=sorted(lst,reverse=True) # 降序

print('原列表:',lst)
print('升序:',asc_lst)
print('降序:',desc_lst)

print('='*50)
# (2) reversed 反向
new_lst = reversed(lst)
print(new_lst) # <class 'list_reverseiterator'> 迭代器对象
print(list(new_lst))

print('='*50)
# (3) zip 将iter1与iter2打包成元组并返回一个可迭代的zip对象
x=['a','b','c','d']
y=[10,20,30,40,50]
zipobj=zip(x,y)
print(zipobj) # <class 'zip'>
print(list(zipobj))

print('='*50)
# (4) enumerate 根据iter对象创建一个enumerate对象
enum = enumerate(y,start=1)
print(enum)
print(tuple(enum))

print('='*50)
# (5) all 判断可迭代对象iter中所有元素的布尔值是否都为True
lst2=[10,20,'',30]
print(all(lst2)) #False  ,空字符串的布尔值是False
print(all(lst)) #True

print('='*50)
lst3 = ['','','','']
# (6) any 判断可迭代对象iter中所有元素的布尔值是否都为False,都为False时为False，其他情况True
print(any(lst2)) #True
print(any(lst)) #True
print(any(lst3)) #False

print('='*50)
# (7) 获取迭代器的下一个元素
zipobj=zip(x,y)
print(next(zipobj)) # ('a', 10)
print(next(zipobj))
print(next(zipobj))

print('='*50)
# (8) filter(function,iter) 通过指定条件过滤序列并返回一个迭代器对象
def fun(num):
    return num%2==1 # 可能是True，False

obj=filter(fun,range(10))  # 将range(10),0-9的整数，都执行一次fun操作
print(type(obj))
print(list(obj)) # [1, 3, 5, 7, 9]

print('='*50)
# (9) map(function,iter) 通过函数function对可迭代对象iter的操作返回一个迭代器对象
def upper(x):
    return x.upper()

new_lst2=['hello','world','python']
obj2=map(upper,new_lst2)
print(type(obj2))
print(list(obj2))
